package com.example.cscot.ui.me;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;

import com.example.cscot.R;
import com.example.cscot.WeiLe;
import com.example.cscot.databinding.FragmentMeBinding;

import java.util.Objects;

//
// 简单点，这个就是除了导航栏外的界面及其关联的全局数据处理（不用ViewModel机制）
// 每个UI元素都要定义一个private变量，然后在onCreateView中通过findViewById()初始化
// 这个UI元素在设计阶段就可以确定一些值，这里通过java对象获取后，想改就改，不改就不变啦，
// 但一般是要关联一个事件处理函数，或者设置，或者获取其数值。
//
// 每个界面UI要做的事情都是：加载历史上保存的数据，更新数据为下次启动时用，写UI元素的消息处理函数以
// 实现业务逻辑，并更新全局变量数据，更新到全局数据中。
// 要持久化，所以就用到了SharedPreferences啦，复杂的就会用到数据库（可能是网络服务化的数据库）来保存啦。
//
public class MeFragment extends Fragment {
    // 获取Fragment关联的View（当前Fragment的UI对象容器）
    private FragmentMeBinding binding;
    //
    // 就是一个全局变量容器，但是支持持久化而已（就是手机/APP重启后数据不会被清0）
    private SharedPreferences sharedPreferences;
    private TextView selectedSubjectText;
    private EditText subjectInput;
    private Button reselectButton;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        // 通过binding来引用布局里的UI元素，root UI元素的容器
        binding = FragmentMeBinding.inflate(inflater, container, false);
        View root = binding.getRoot();
        // 总是和MainActivity关联起来的
        sharedPreferences = WeiLe.mainActivity.getSharedPreferences("userPrefs", Context.MODE_PRIVATE);

        // 获取布局中的组件
        selectedSubjectText = root.findViewById(R.id.selected_subject_text);
        subjectInput = root.findViewById(R.id.chat_input_text2);
        reselectButton = root.findViewById(R.id.button);

        // 加载保存的用户数据
        loadUserData();

        // 这是列表框的标准设置方法，背住就行
        subjectInput.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                selectedSubjectText.setText(s.toString());
                WeiLe.gKeMu = s.toString();  // 实时更新全局变量
            }

            @Override
            public void afterTextChanged(Editable s) {}
        });

        // 设置按钮点击事件，清空输入和显示的科目
        reselectButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                subjectInput.setText("");
                selectedSubjectText.setText("");
                WeiLe.gKeMu = "";  // 清空全局变量
                WeiLe.gKnowledge = "";
                WeiLe.gGrade = "";
            }
        });

        return root;
    }

    private void loadUserData() {
        binding.chatInputText.setText(sharedPreferences.getString("name", ""));
        binding.chatInputText4.setText(sharedPreferences.getString("email", ""));
        binding.chatInputText1.setText(sharedPreferences.getString("phone", ""));
        binding.chatInputText2.setText(sharedPreferences.getString("subject", ""));
        binding.chatInputText3.setText(sharedPreferences.getString("grade", ""));
        binding.chatInputText5.setText(sharedPreferences.getString("knowledge_point", ""));
        binding.chatInputText6.setText(sharedPreferences.getString("gender", ""));
        selectedSubjectText.setText(sharedPreferences.getString("subject", ""));
    }

    private void saveUserData() {
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString("name", binding.chatInputText.getText().toString());
        editor.putString("email", binding.chatInputText4.getText().toString());
        editor.putString("phone", binding.chatInputText1.getText().toString());
        editor.putString("subject", binding.chatInputText2.getText().toString());
        editor.putString("grade", binding.chatInputText3.getText().toString());
        editor.putString("knowledge_point", binding.chatInputText5.getText().toString());
        editor.putString("gender", binding.chatInputText6.getText().toString());

        // 更新全局变量
        WeiLe.gKeMu = binding.chatInputText2.getText().toString();
        WeiLe.gKnowledge = binding.chatInputText5.getText().toString();
        WeiLe.gGrade = binding.chatInputText3.getText().toString();

        editor.apply();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        // 用户离开界面时保存数据
        saveUserData();
        binding = null;
    }
}
